package cn.edu.hnu.gpg.service;

import cn.edu.hnu.gpg.dto.MessageWithName;
import cn.edu.hnu.gpg.entity.Message;
import cn.edu.hnu.gpg.entity.User;

import java.util.Date;
import java.util.List;

public interface MessageService {
    /**
     * 发送消息
     * @param from_user_id 发送者的用户id
     * @param to_username 收信者，通过username查找user_id
     * @param content 消息的内容
     * @return 是否发送成功
     */
    boolean sendMessage(int from_user_id,String to_username,String content);

    List<Integer> sendMessage(Integer sender, List<Integer> receiverList, String messageContent);

    Message findMessageById(Integer messageId);

    MessageWithName message2MessageWithName(Message messages);

    List<MessageWithName> message2MessageWithName(List<Message> messages);

    /**
     *查找所有接收的信息
     * @param to_user_id 接收方用户id
     * @return 消息的集合
     */
    List<Message> readAllReceiveMessage(int to_user_id);

    /**
     * 查看所有发送的消息
     * @param from_user_id 消息发送者的用户ID
     * @return 发送的消息集合
     */
    List<Message> readAllSendMessage(int from_user_id);

    /**
     * 用于查找未读信息
     * @param to_user_id 接收方用户id（当前登录用户id）
     * @return 未读的消息集合
     */
    List<Message> findNewMessage(int to_user_id);

    /**
     * 将消息标记为已读
     * @param message_id 消息的序列id
     * @return 是否标记成功
     */
    boolean markMessageReaded(int message_id);

    /**
     *通过发送者，接收者，发送时间来定位具体的信息
     * @param from_user_id 发送者用户id
     * @param to_user_id 接受者用户id（因为是将信息标记为已读，所以应该是当前用户的用户id）
     * @param date 消息的发送日期
     * @return 是否修改成功
     */
    boolean markMessageReaded(int from_user_id, int to_user_id, Date date);

    /**
     *通过发送者，接收者，发送时间来定位具体的信息
     * @param from_username 发送者用户昵称
     * @param to_user_id 接受者用户id（因为是将信息标记为已读，所以应该是当前用户的用户id）
     * @param date 消息的发送日期
     * @return 是否修改成功
     */
    boolean markMessageReaded(String from_username, int to_user_id, Date date);

    /**
     * 通过主键删除某条消息
     * @param message_id 消息的序列ID
     * @return 是否删除成功
     */
    boolean deleteByPk(int message_id);
}
